OpenFisca Editor開発チーム
メンバー
もりもとだいき.icon syuparn.icon shiketta_hinachan.icon YotaroMatsui.icon
活動内容
「支援みつもりヤドカリくん」バックエンドの開発を支援するためのエディタを開発
目的
制度を追加したい自治体等利用者向け
プログラミングができなくても追加したい欲しい制度を追加できるようになる
開発者向け
OpenFisca(バックエンド)の開発速度が上がる
方法
GPT、Gemini等の生成AIを使ってコードを生成
進行中
生成AIを用いたコード生成の検証
生成対象
OpenFiscaのロジック実装クラス(計算式のPythonコード)
パラメータファイル(金額等の定数を表わすyaml,csvファイル)
制度のURLをプロンプトに指定して上記ファイルを生成
今後やっていきたいこと
ワンストップでコード生成
案:生成物をさらにプロンプトに入れることで整形
次に追加する制度で使ってみる
(ジャストアイデア)開発者のレビューで利用?
サンプルデータとして使えそうな情報
ロジック実装クラス
受験生チャレンジ支援貸付:
パラメータファイル:
制度の公式情報
プロンプト
code:_
制度情報をもとにソースコードを生成してください。
ソースコード:
`
class 児童育成手当(Variable):
value_type = float
entity = 世帯
definition_period = DAY
label = "保護者への児童手当"
documentation = """
渋谷区の児童育成手当制度
- 〒150-8010 東京都渋谷区宇田川町1-1
- 渋谷区子ども青少年課子育て給付係
- 03-3463-2558
"""
def formula(対象世帯, 対象期間, parameters):
居住都道府県 = 対象世帯("居住都道府県", 対象期間)
# 東京都以外は対象外
if 居住都道府県 != "東京都":
return 0
児童育成手当 = parameters(対象期間).福祉.育児.児童育成手当
世帯高所得 = 対象世帯("特別児童扶養手当の控除後世帯高所得", 対象期間)
扶養人数 = 対象世帯("扶養人数", 対象期間)0 所得制限限度額 = 児童育成手当.所得制限限度額扶養人数 所得条件 = 世帯高所得 < 所得制限限度額
ひとり親世帯である = 対象世帯("ひとり親", 対象期間)
学年 = 対象世帯.members("学年", 対象期間)
上限学年以下の人数 = 対象世帯.sum(学年 <= 児童育成手当.上限学年)
手当条件 = ひとり親世帯である * 所得条件
return 手当条件 * 上限学年以下の人数 * 児童育成手当.金額
`
`
class 重度心身障害者手当(Variable):
value_type = float
entity = 世帯
definition_period = DAY
label = "重度心身障害者手当の最大額"
documentation = """
東京都の制度
厳密な判定には詳細な症状が必要なため、愛の手帳等級、身体障害者手帳等から推定可能な最小値、最大値を算出
算出方法は以下リンクも参考になる。
"""
def formula(対象世帯, 対象期間, parameters):
居住都道府県 = 対象世帯("居住都道府県", 対象期間)
# 東京都以外は対象外
if 居住都道府県 != "東京都":
return 0
年齢 = 対象世帯.members("年齢", 対象期間)
年齢条件 = 年齢 < 65
愛の手帳等級 = 対象世帯.members("愛の手帳等級", 対象期間)
身体障害者手帳等級 = 対象世帯.members("身体障害者手帳等級", 対象期間)
# 該当する可能性のある条件
一号要件 = (愛の手帳等級 == 愛の手帳等級パターン.一度) | (愛の手帳等級 == 愛の手帳等級パターン.二度)
二号要件 = ((愛の手帳等級 == 愛の手帳等級パターン.一度) | (愛の手帳等級 == 愛の手帳等級パターン.二度)) & \
((身体障害者手帳等級 == 身体障害者手帳等級パターン.一級) | (身体障害者手帳等級 == 身体障害者手帳等級パターン.二級))
三号要件 = 身体障害者手帳等級 == 身体障害者手帳等級パターン.一級
障害条件 = 一号要件 | 二号要件 | 三号要件
所得条件 = 対象世帯.members("重度心身障害者手当所得制限", 対象期間)
受給条件 = 年齢条件 & 障害条件 & 所得条件
対象人数 = np.count_nonzero(受給条件)
return 対象人数 * parameters(対象期間).東京都.福祉.重度心身障害者手当.重度心身障害者手当額
`
ソースコード:
code:python
class 受験生チャレンジ支援貸付(Variable):
value_type = float
entity = 世帯
definition_period = DAY
label = "受験生チャレンジ支援貸付の貸付額"
documentation = """
東京都の制度
高校・大学受験対策の学習塾等の費用をサポートする貸付制度
貸付額は、対象となる受験料の合計額の8割が上限
"""
def formula(対象世帯, 対象期間, parameters):
居住都道府県 = 対象世帯("居住都道府県", 対象期間)
# 東京都以外は対象外
if 居住都道府県 != "東京都":
return 0
受験生 = 対象世帯.members("受験生", 対象期間)
if not 受験生:
return 0
受験料 = 対象世帯.sum(受験生.members("受験料", 対象期間))
if 受験料 == 0:
return 0
return 受験料 * 0.8
パラメータファイルの生成
プロンプト: 制度名とURLだけ指定
code:_
「受験生チャレンジ支援貸付事業」において、世帯の人数、条件に応じた所得制限金額をmarkdownファイルの箇条書き形式でまとめてください。この時、金額は全て半角数字で表記してください。
(なぜかスプレッドシートで生成される)
TODO: 文字が多い(カンマや円等がある)ので、数字だけを抽出できるように改良したい
code:csv
世帯の人数 条件 所得制限金額
3人 一般世帯 合計所得(年間)4,410,000円以下、合計所得額(年間)3,087,000円以下
4人 一般世帯 合計所得(年間)5,049,000円以下、合計所得額(年間)3,599,000円以下
5人 一般世帯 合計所得(年間)5,737,000円以下、合計所得額(年間)4,149,000円以下
6人 一般世帯 合計所得(年間)6,522,000円以下、合計所得額(年間)4,776,000円以下
2人 ひとり親世帯 合計所得(年間)4,057,000円以下、合計所得額(年間)2,805,000円以下
3人 ひとり親世帯 合計所得(年間)4,966,000円以下、合計所得額(年間)3,532,000円以下
4人 ひとり親世帯 合計所得(年間)5,772,000円以下、合計所得額(年間)4,175,000円以下
5人 ひとり親世帯 合計所得(年間)6,396,000円以下、合計所得額(年間)4,674,000円以下
上記の結果に対しさらにBartで下記追加質問をすると数字だけが取り出せる。かたの_.icon
送信したメッセージ: 上記回答の条件欄から「人」を所得制限金額欄から「円以下」を取り除いてください
世帯の人数 条件 所得制限金額
一般世帯 3人 4,410
一般世帯 4人 5,049
一般世帯 5人 5,737
一般世帯 6人 6,522
ひとり親世帯 2人 4,057
ひとり親世帯 3人 4,966
ひとり親世帯 4人 5,772
ひとり親世帯 5人 6,396
データ生成に関して📝
GPT-3.5はURL参照ができない
Bard(Gemini)でも「コード生成できない」というレスポンスが返ってくることがある?
Bardの出力が異なる理由を理解することで、より適切な回答を生成できるようになります。質問を明確にしたり、最新情報を提供したり、Bardにランダム性を使用するように依頼したりできます。
→より一つの回答になるように質問考えてみます。かたの_.icon*3
関連ハッシュタグ